home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / PNL Libraries / MyLogs.p < prev    next >
Text File  |  1995-03-13  |  4KB  |  174 lines

  1. unit MyLogs;
  2.  
  3. interface
  4.  
  5.     uses
  6.         BaseLogs,Files;
  7.  
  8.     var
  9.         log_fs:FSSpec;
  10.         log_rn:integer;
  11.         
  12.     procedure InitLogs(keepopen,flush:boolean);
  13.     procedure InitLogsFS(keepopen,flush:boolean; fs:FSSpec);
  14.     procedure FinishLogs;
  15.     procedure LogRaw (s: str255);
  16.     procedure Log (l: LogStrings);
  17.     procedure Log3 (l: LogStrings; s1, s2, s3: str255);
  18.     procedure LogTime (l: LogStrings; s3: Str255);
  19.     procedure LogFS (l: LogStrings; fs: FSSpec; s2, s3: str255);
  20.     function ErrorTrailer (err: OSErr): Str255;
  21.  
  22. implementation
  23.  
  24.     uses
  25.         Errors,TextUtils,MyTypes,Files,Folders,Aliases,MyStrH,MyStrings,MyUtils,MyFileSystemUtils;
  26.         
  27.     const
  28.         log_text_creator='R*ch';
  29.     
  30.     var
  31.         gKeepOpen:boolean;
  32.         gFlush:boolean;
  33.         
  34.     procedure StartLog;
  35.         var
  36.             err: OSErr;
  37.     begin
  38.         if log_rn = bad_rn then begin
  39.             err := FSpCreate(log_fs, log_text_creator, 'TEXT', -1);
  40.             err := FSpOpenDF(log_fs, fsWrPerm, log_rn);
  41.             if err <> noErr then begin
  42.                 log_rn := bad_rn;
  43.             end else begin
  44.                 err := SetFPos(log_rn, fsFromLEOF, 0);
  45.             end;
  46.         end;
  47.     end;
  48.  
  49.     procedure StopLog;
  50.         var
  51.             err: OSErr;
  52.     begin
  53.         if log_rn <> bad_rn then begin
  54.             err := FSClose(log_rn);
  55.             log_rn := bad_rn;
  56.         end;
  57.     end;
  58.  
  59.     procedure JointInit(keepopen,flush:boolean);
  60.         var
  61.             junk:OSErr;
  62.             isfolder, wasalias:boolean;
  63.     begin
  64.         log_rn:=bad_rn;
  65.         if GetIndStr(log_strh_id,ord(LS_Last))<>'<LAST>' then begin
  66.             DebugStr('MyLogs:Log LS_Last is not <LAST>');
  67.         end;
  68.         gKeepOpen:=keepopen;
  69.         gFlush:=flush;
  70.         junk := ResolveAliasFile(log_fs, true, isfolder, wasalias);
  71.         if gKeepOpen then begin
  72.             StartLog;
  73.         end;
  74.     end;
  75.     
  76.     procedure InitLogs(keepopen,flush:boolean);
  77.         var
  78.             junk:OSErr;
  79.     begin
  80.         junk :=FindFolder(kOnSystemDisk,kPreferencesFolderType,true,log_fs.vRefNum,log_fs.parID);
  81.         junk := FSMakeFSSpec(log_fs.vRefNum,log_fs.parID, GetIndStr(log_strh_id,ord(LS_Filename)), log_fs);
  82.         JointInit(keepopen,flush);
  83.     end;
  84.     
  85.     procedure InitLogsFS(keepopen,flush:boolean; fs:FSSpec);
  86.     begin
  87.         log_fs:=fs;
  88.         JointInit(keepopen,flush);
  89.     end;
  90.     
  91.     procedure FinishLogs;
  92.     begin
  93.         StopLog;
  94.     end;
  95.     
  96.     procedure LogRaw (s: str255);
  97.         var
  98.             count: longInt;
  99.             err: OSErr;
  100.             pb: paramBlockRec;
  101.     begin
  102.         StartLog;
  103.         if log_rn <> bad_rn then begin
  104.             s := concat(s, cr);
  105.             count := length(s);
  106.             err := FSWrite(log_rn, count, @s[1]);
  107.  
  108.             if not gKeepOpen then begin
  109.                 StopLog;
  110.             end else if gFlush then begin
  111.                 pb.ioRefNum := log_rn;
  112.                 err := PBFlushFileSync(@pb);
  113.             end;
  114.             if gFlush then begin
  115.                 pb.ioNamePtr := nil;
  116.                 pb.iovRefNum := log_fs.vRefnum;
  117.                 err := PBFlushVolSync(@pb);
  118.             end;
  119.         end;
  120.     end;
  121.  
  122.     function ErrorTrailer (err: OSErr): Str255;
  123.         var
  124.             s: Str255;
  125.     begin
  126.         if err = noErr then begin
  127.             s := '';
  128.         end
  129.         else begin
  130.             SPrintS3(s, GetIndStr(log_strh_id, ord(LS_ErrorTrailer)), '', '', NumToStr(err));
  131.         end;
  132.         ErrorTrailer := s;
  133.     end;
  134.  
  135.     procedure Log (l: LogStrings);
  136.     begin
  137.         LogRaw(GetIndStr(log_strh_id, ord(l)));
  138.     end;
  139.  
  140.     procedure Log3 (l: LogStrings; s1, s2, s3: str255);
  141.         var
  142.             s: str255;
  143.     begin
  144.         SPrintS3(s, GetIndStr(log_strh_id, ord(l)), s1, s2, s3);
  145.         LogRaw(s);
  146.     end;
  147.  
  148.     procedure LogTime (l: LogStrings; s3: Str255);
  149.         var
  150.             s1, s2: str255;
  151.             date: longInt;
  152.     begin
  153.         GetDateTime(date);
  154.         IUDateString(date, shortDate, s1);
  155.         IUTimeString(date, false, s2);
  156.         Log3(l, s1, s2, s3);
  157.     end;
  158.  
  159.     procedure LogFS (l: LogStrings; fs: FSSpec; s2, s3: str255);
  160.         var
  161.             s: str255;
  162.             err: OSErr;
  163.     begin
  164.         err := FSSpecToFullpath(fs, s);
  165.         if err = fnfErr then begin
  166.             err := noErr;
  167.         end;
  168.         if err <> noErr then begin
  169.             s := concat('???:', fs.name);
  170.         end;
  171.         Log3(l, s, s2, s3);
  172.     end;
  173.  
  174. end.